/*
 * resolver.c
 *
 *  Created on: 21/04/2011
 *      Author: joao
 */

#include "resolver.h"

#include "aux.h"
#include "GUI/backend-publico.h"

#include <stdio.h>

void preencheCertezas(){
	int i, j, k, num, conta, mudou;
	int numeros [9]; /* vale 0 se o numero é possível, 1 se não. */
	int *pt_num;

	for(i=1; i<=9; i++){
		for(j=1; j<=9; j++){
			if(pegaNumero(i,j)==0){
				for(k=0; k<9; k++)
					numeros[k]=0;
				/* checa proibições na linha */
				for(k=1; k<=9; k++){
					num=pegaNumero(i,k);
					if(num!=0)
						numeros[num-1]=1;
				}
				/* checa proibições na coluna */
				for(k=1; k<=9; k++){
					num=pegaNumero(k,j);
					if(num!=0)
						numeros[num-1]=1;
				}
				/* checa proibições no bloco */
				pt_num=&numeros[0];
				checaBloco(i,j, pt_num);
				/* checa se só tem uma possibilidade */
				conta=0;
				for(k=0; k<9; k++){
					if(numeros[k]==0){
						num=k+1;
						conta++;
					}
				}
				if(conta==1){
					setaNumero(i,j,num);
					mudou=1;
				}
			}
		}
	}
	/* se algo foi acrescentado, refaz processo */
	if(mudou==1)
		preencheCertezas();
}
